﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using RzCorportativo.Lib;
using EFramework.Web.TypeExtension;

namespace  RzCorportativo.Views.Ferramentas
{
    public partial class Grupo : BasePage
    {
        protected List<RzCorportativo.Lib.Login> Logins { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.Request["grupoId"]))
            {
                var item = RzCorportativo.Lib.Grupo.CreateInstance(IntExtension.Parse(this.Request["grupoId"], 0));
                if (item != null)
                    this.Logins = item.Login;
            }
            if (this.Logins == null)
                this.Logins = new List<RzCorportativo.Lib.Login>();
            if (this.IsPostBack)
                return;
            if (string.IsNullOrEmpty(this.Request["grupoId"]))
                return;
            var grupo = RzCorportativo.Lib.Grupo.CreateInstance(IntExtension.Parse(this.Request["grupoId"], 0));
            if (grupo == null)
                return;
            this.GrupoId.Value = grupo.GrupoId.ToString();
            this.Descricao.Text = grupo.Descricao;
            this.Status.SelectedValue = grupo.Ativo ? "1" : "0";
        }

        [WebMethod]
        public static object Listar(string termo)
        {
            var lista = RzCorportativo.Lib.Login.Listar(new RzCorportativo.Lib.Login() { LoginText = termo });
            return lista.Select(s => new { label = s.LoginText, value = s.LoginText, loginId = s.LoginId, description = s.Usuario != null ? s.Usuario.Nome : s.LoginText, image = "/Recursos/i/loading.gif" }).ToList();
        }

        [WebMethod]
        public static RzCorportativo.Lib.Login Adicionar(int loginId, int grupoId)
        {
            RzCorportativo.Lib.Grupo grupo = RzCorportativo.Lib.Grupo.CreateInstance(grupoId);
            var login = RzCorportativo.Lib.Login.CreateInstance(loginId);
            bool salvo = grupo.AddUser(login);
            return login;
        }

        [WebMethod]
        public static RzCorportativo.Lib.Login Remover(int loginId, int grupoId)
        {
            RzCorportativo.Lib.Grupo grupo = RzCorportativo.Lib.Grupo.CreateInstance(grupoId);
            var login = RzCorportativo.Lib.Login.CreateInstance(loginId);
            bool salvo = grupo.RemoveUser(login);
            return login;
        }

        protected void salvar_Click(object sender, EventArgs e)
        {
            RzCorportativo.Lib.Grupo grupo = new RzCorportativo.Lib.Grupo();
            grupo.Ativo = "1".Equals(this.Status.SelectedValue);
            grupo.Descricao = this.Descricao.Text;
            grupo.GrupoId = IntExtension.Parse(this.GrupoId.Value, 0);
            Alert alerta = new Alert("erroGeral", this);
            alerta.AlertType = AlertType.Error;
            bool redirect = false;
            try
            {
                if (string.IsNullOrEmpty(grupo.Descricao))
                {
                    alerta.Add("nome", "Descrição inválida");
                }
                if (0.Equals(this.Status.SelectedIndex))
                {
                    alerta.Add("status", "Status inválido");
                }
                if (alerta.HasMessage)
                    return;
                if (grupo.Salvar())
                {
                    alerta.AlertType = AlertType.Success;
                    //alerta.Add("sucesso", "Grupo salvo com sucesso!");
                    redirect = true;
                }
                else
                {
                    alerta.Add("vergonhoso", "Descupe isto é vergonhoso!");
                    alerta.Add("falha", "Não foi possível salvar o grupo");
                }
            }
            catch (Exception ex)
            {
                if (!alerta.Exists("vergonhoso"))
                    alerta.Add("vergonhoso", "Descupe isto é vergonhoso!");
                alerta.Add("ex", ex.Message);
            }
            finally
            {
                if (alerta.HasMessage)
                    alerta.Show();
            }
            if (redirect)
                this.Response.Redirect(this.ResolveUrl("~/Views/Ferramentas/Grupos.aspx?op=s"));
        }
    }
}